/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.matter_network.components; import cpw.mods.fml.common.gameevent.TickEvent; import matteroverdrive.MatterOverdrive; import matteroverdrive.api.network.IMatterNetworkClient; import matteroverdrive.api.network.IMatterNetworkDispatcher; import matteroverdrive.api.network.MatterNetworkTask; import matteroverdrive.machines.MOTileEntityMachine; import matteroverdrive.matter_network.MatterNetworkTaskQueue; import net.minecraft.world.World; import org.apache.logging.log4j.Level; /** * Created by Simeon on 7/16/2015. */ public abstract class MatterNetworkComponentClientDispatcher <K extends MatterNetworkTask,T extends MOTileEntityMachine & IMatterNetworkClient & IMatterNetworkDispatcher> extends MatterNetworkComponentClient<T> implements IMatterNetworkDispatcher<K> { private TickEvent.Phase dispatchPhase; public MatterNetworkComponentClientDispatcher(T rootClient,TickEvent.Phase dispatchPhase) { super(rootClient); this.dispatchPhase = dispatchPhase; } @Override public MatterNetworkTaskQueue<K> getTaskQueue(int queueID) { return rootClient.getTaskQueue(queueID); } @Override public int onNetworkTick(World world, TickEvent.Phase phase) { super.onNetworkTick(world,phase); if (phase.equals(dispatchPhase)) { for (int i = 0;i < getTaskQueueCount();i++) { if (getTaskQueue(i).peek() != null) { try { return manageTopQueue(world,i, getTaskQueue(i).peek()); } catch (Exception e) { MatterOverdrive.log.log(Level.ERROR, e, "Where was a problem while trying to get task from Queue from %s", getClass()); try { getTaskQueue(i).dequeue(); }catch (Exception e1) { MatterOverdrive.log.log(Level.ERROR, e1, "Could not deque bad task from dispatcher!"); getTaskQueue(i).clear(); } } } } } return 0; } public abstract int manageTopQueue(World world,int queueID,K element); public int getTaskQueueCount() { return rootClient.getTaskQueueCount(); } }